package medium;

/**
 * 给你一个整数数组 nums ，和两个整数 limit 与 goal 。数组 nums 有一条重要属性：abs(nums[i]) <= limit 。
 * 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 ，添加元素 不应改变 数组中 abs(nums[i]) <= limit 这一属性。
 * 注意，如果 x >= 0 ，那么 abs(x) 等于 x ；否则，等于 -x 。
 * <p>
 * 示例 1：
 * 输入：nums = [1,-1,1], limit = 3, goal = -4
 * 输出：2
 * 解释：可以将 -2 和 -3 添加到数组中，数组的元素总和变为 1 - 1 + 1 - 2 - 3 = -4 。
 * <p>
 * 示例 2：
 * 输入：nums = [1,-10,9,1], limit = 100, goal = 0
 * 输出：1
 */
public class T6 {
    public static void main(String[] args) {
        int[] nums = {1, -1, 1};
        int limit = 3, goal = -5;
        System.out.println(new T6().minElements(nums, limit, goal));
    }

    public int minElements(int[] nums, int limit, int goal) {
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        int abs = Math.abs(goal - sum);
        return (abs + limit - 1) / limit;
        /**
         * 接下来计算需要使用多少个不超过 limit 的数字来凑齐 diff，分两种情况：
         * 若 limit 整除 abs，答案是 limit/abs
         * 若 limit 不整除 abs，答案是 limit/abs +1
         * 以上两种情况可以使用一个表达式来计算：(abs +limit -1)/ limit
         */
    }
}
